package com.wyf.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/redirect")
public class RedirectController {
    /**
     * 重定向到JSP页面
     * 默认从项目的根目录下开始寻找，但是也可以指定对对路径
     *   返回ModelAndView对象
     * @return
     */
    @RequestMapping("/view01")
    public ModelAndView view01() {
        ModelAndView modelAndView = new ModelAndView();
        // 数据模型（请求域的值在重定向中获取不到）
        modelAndView.addObject("msg", "Redirect01");
        // 设置试图
        modelAndView.setViewName("redirect:view.jsp");
        //modelAndView.setViewName("test");
        return modelAndView;
    }


    /**
     * Session传递参数
     * @return
     */
    @RequestMapping("/view02")
    public ModelAndView view02(HttpSession session) {
        ModelAndView modelAndView = new ModelAndView();
        // 数据模型（请求域的值在重定向中获取不到，但是可以使用session来传递）
        session.setAttribute("msg", "Redirect02");
        modelAndView.addObject("msg", "Redirect01");
        // 设置试图
        modelAndView.setViewName("redirect:view.jsp?uname=wyf");
        //modelAndView.setViewName("test");
        return modelAndView;
    }

    /**
     * 解决url中传递中文
     *   使用RedirectAttributes对象设施
     * @return
     */
    @RequestMapping("/view03")
    public ModelAndView view03(RedirectAttributes redirectAttributes) {
        ModelAndView modelAndView = new ModelAndView();
        // 设置中文参数
        redirectAttributes.addAttribute("uname", "王一飞");
        // 设置试图
        modelAndView.setViewName("redirect:view.jsp");
        //modelAndView.setViewName("test");
        return modelAndView;
    }

    /**
     * 重定向到控制器
     * 默认从项目的根目录下开始寻找，但是也可以指定对对路径
     *   返回ModelAndView对象
     * @return
     */
    @RequestMapping("/view04")
    public ModelAndView view04() {
        ModelAndView modelAndView = new ModelAndView();
        // 数据模型（请求域的值在重定向中获取不到）
        modelAndView.addObject("msg", "Redirect01");
        // 设置试图
        modelAndView.setViewName("redirect:/hello");
        //modelAndView.setViewName("test");
        return modelAndView;
    }

    /**
     * 重定向到JSP页面
     * 默认从项目的根目录下开始寻找，但是也可以指定对对路径
     *   返回页面String
     * @return
     */
    @RequestMapping("/view05")
    public String view05() {

        return "redirect:/view.jsp";
    }

    /**
     * 重定向到控制器
     * 默认从项目的根目录下开始寻找，但是也可以指定对对路径
     *   返回控制器String
     * @return
     */
    @RequestMapping("/view06")
    public String view06() {

        return "redirect:/hello";
    }
}
